package com.ruoyi.delivery.mapper;

import com.ruoyi.delivery.domain.DelVehicle;
import com.ruoyi.delivery.domain.dto.Monitor;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface DelVehicleMapper {

    /**
     * 获取车辆信息列表，支持分页和筛选
     *
     * @param vehicleNo    车辆编号
     * @param vehiclePerson 车辆负责人
     * @param vehicleType   车辆类型
     * @param capacity      容量
     * @param startDate     创建时间开始范围
     * @param endDate       创建时间结束范围
     * @param activeStatus  生效状态
     * @param offset        分页起始位置
     * @param pageSize      分页大小
     * @param logisticsDeliver 物流商编号
     * @return 车辆信息列表
     */
    List<DelVehicle> getVehicleList(
            @Param("vehicleNo") String vehicleNo,
            @Param("vehiclePerson") String vehiclePerson,
            @Param("vehicleType") String vehicleType,
            @Param("capacity") Double capacity,
            @Param("startDate") String startDate,
            @Param("endDate") String endDate,
            @Param("activeStatus") Boolean activeStatus,
            @Param("offset") int offset,
            @Param("pageSize") int pageSize,
            @Param("logisticsDeliver") String logisticsDeliver
    );

    /**
     * 获取符合筛选条件的车辆总记录数
     *
     * @param vehicleNo    车辆编号
     * @param vehiclePerson 车辆负责人
     * @param vehicleType   车辆类型
     * @param capacity      容量
     * @param startDate     创建时间开始范围
     * @param endDate       创建时间结束范围
     * @param activeStatus  生效状态
     * @param logisticsDeliver 物流商编号
     * @return 总记录数
     */
    int getVehicleCount(
            @Param("vehicleNo") String vehicleNo,
            @Param("vehiclePerson") String vehiclePerson,
            @Param("vehicleType") String vehicleType,
            @Param("capacity") Double capacity,
            @Param("startDate") String startDate,
            @Param("endDate") String endDate,
            @Param("activeStatus") Boolean activeStatus,
            @Param("logisticsDeliver") String logisticsDeliver
    );

    /**
     * 新建车辆信息
     *
     * @param vehicle 车辆信息对象
     * @return 插入成功的记录数
     */
    int insertVehicleInfo(DelVehicle vehicle);

    /**
     * 更新车辆信息
     *
     * @param vehicle 车辆信息对象
     * @return 更新成功的记录数
     */
    int updateVehicleInfo(DelVehicle vehicle);

    /**
     * 删除车辆信息
     *
     * @param vehicleNo 车辆编号
     * @return 删除成功的记录数
     */
    int deleteVehicle(@Param("vehicleNo") String vehicleNo);

    /**
     * 批量删除车辆信息
     *
     * @param vehicleNos 车辆编号列表
     * @return 删除成功的记录数
     */
    int deleteVehicles(@Param("vehicleNos") List<String> vehicleNos);

    /**
     * 获取车辆位置信息
     *
     * @param logisticsDeliver 物流商编号
     * @return 车辆位置信息列表
     */
    List<Monitor> getVehicleLocation(@Param("logisticsDeliver") String logisticsDeliver);

    /**
     * 获取所有车辆
     *
     * @param logisticsDeliver 物流商编号
     * @return 车辆信息
     */
    List<DelVehicle> getAllVehicle(@Param("logisticsDeliver") String logisticsDeliver);

}
